CSS의 계단식과 상속
✒️ 2025-05-16 11:46 내용 수정
Cascade : 종속, 폭포처럼 떨어지다. 작은 폭포
- CSS의 이름에서 볼 수 있듯 스타일을 계단식으로 적용한다는 것을 유추할 수 있다.
- 이는 CSS의 계단식 및 우선순위 적용과 상속 특성과도 연결된다.
- 참고 자료 : mdn web docs 계산식 및 상속, mdn web doc 계단식 및 상속 원문(Handling conflicts), mdn web docs 종속 계층
상속(Inheritance)
- CSS도 부모 요소와 자식 요소의 상속 구조로 이루어져 있다.
- CSS 속성값이 부모 요소에 적용되면 자식 요소는 그 속성값을 상속 받거나 일부 속성의 경우엔 상속 받지 않을 수 있다.
color같은 속성은 보통 상속되며,width,margin,padding,border와 같은 속성들은 상속 받지 않는다.
- 상속 구조를 활용하여 코드를 간결하게 만들 수 있고, CSS 적용 범위를 보다 효율적으로 관리할 수 있다.
<p>
상속 글자 테스트
<span>내부 글자</span>
</p>
body {
color: blue;
}
span {
color: black;
}
- CSS에서 상속을 제어하는 데 사용하는 속성은 5가지가 있다.
- 상속 제어 키워드를 사용하여 부모 요소에 적용된 CSS를 상속 받거나 이를 무시하고 다른 속성을 사용할 수도 있다.
| 속성 | 설명 |
|---|---|
inherit |
부모 요소의 속성값을 상속 받아 선택한 요소의 속성값에 적용 |
initial |
선택한 요소의 속성값을 해당 속성의 초기값으로 설정 |
revert |
선택한 요소의 속성값을 브라우저의 기본 스타일로 초기화 |
revert-layer |
선택한 요소의 속성값을 이전 cascade 레이어에서 지정한 값으로 초기화 |
unset |
상속을 받았다면 inherit, 그 외에는 initial처럼 동작 |
<ul>
<li class="first"><a>첫 번째 a 태그</a></li>
<li class="second"><a>두 번째 a 태그</a></li>
<li class="third"><a>세 번째 a 태그</a></li>
</ul>
body{
color: green;
}
ul .first{
color: inherit;
}
ul .second{
color: initial;
}
ul .third{
color: unset;
}
계단식(cascading)
- CSS에서 동일한 요소에 여러 개의 스타일 규칙을 부여할 때 cascade는 3가지 요소로 어떤 스타일을 적용할지 결정한다.
- 아래로 갈수록 가중치가 높다.
1. 소스 순서(Source ordering)
2. 명시도(Specificity)
3. 중요성(Importance)
- cascade로 우선 순위를 부여한 이후에 CSS 정의가 어느 스타일 시트에 있는지도 CSS 규칙이 결정되는 데 영향을 미친다.
- 여러 스타일 시트가 지정이 된 상태라면 충돌 선언은 아래 순서대로 적용된다.
- 이후에 나온 선언이 이전에 나온 선언을 덮어쓴다.
1. user agent 스타일 시트(ex: 브라우저 기본 스타일 등)
2. 사용자 스타일 시트의 일반 선언
3. 작성자 스타일 시트의 일반 선언(웹 개발자 설정)
4. 작성자 스타일 시트의 중요 선언
5. 사용자 스타일 시트의 중요 선언
6. user agent 스타일 시트의 중요 선언
소스 순서(Source ordering)
- CSS에서는 같은 명시도를 가지는 두 규칙이 적용될 때 마지막에 작성된 코드(규칙)을 적용한다.
<div>첫 번째</div>
<div>두 번째</div>
div { color: blue; }
div { color: red; }
명시도(Specificity)
Specificity : 특정함, 명확함
mdn web docs 명시도 , CSS Specifishity, Mastering CSS Specificity, Specificity in CSS Selectors참고.
- 요소를 가리키는 선택자(Selector)에 따라 그 요소를 가리키는 명시도(Specificity)가 다르며, 이에 따른 가중치도 다르게 결정된다.

-
요소 선택자/태그 선택자(
div등)는 그에 해당하는 페이지 내의 모든 요소를 선택하기 때문에 덜 구체적이다.- 가상 요소(Pseudo Element)도 같은 비중을 가진다.
-
클래스 선택자/id 선택자는 특정
class/id속성을 가진 요소들을 선택하기 때문에 더 구체적이다.- 속성 선택자와 가상 클래스(Pseudo Class) 역시 같은 비중을 가진다.
-
범용 선택자(
*), 결합자(+,>,~등), 부정 의사 클래스(:not)는 명시도에 영향을 미치지 않는다.
<div class="first">첫 번째</div>
div { color: blue; }
.first { color: red; }
- 선택자를 사용하여 각 요소에 가중치에 따른 스타일을 적용한다면 중복된 CSS 코드 작성을 방지할 수 있다.
- 일반적인 방법은 기본 요소들에 대부분 적용되는 스타일을 먼저 지정하고, 세부적인 스타일을 지정할 때 선택자를 사용한 스타일을 적용한다.
<ul>
<li><a>첫 번째 링크</a></li>
<li><a class="new-link">두 번째 링크</a></li>
</ul>
a {color : black; }
.new-link { color : red; }
- 선택자 중에서도
id는class보다 높은 가중치를 가진다.class로 지정한 속성값은 여러 요소가 가질 수 있다.id로 지정한 속성값은 하나의 요소만 가질 수 있다.
<div class="box">첫 번째 박스</div>
<div id="container" class="box">두 번째 박스</div>
.box{ color : black; }
#container{ color : red; }
- inline style(
style속성에 정의된 속성값)은 일반 스타일의 명시도에 상관없이 가장 높은 우선 순위를 가진다.
<div id="container" class="box"
style="color:palevioletred;"
>스타일 우선 순위</div>
.box{ color : black; }
#container{ color : red; }
중요성(Importance)
!important플래그를 적용한 CSS 규칙은 다른 규칙들보다 먼저 적용된다.- inline style보다도 더 먼저 적용된다.
- 하지만 이 플래그를 적용하면 일반 선언된 규칙들이나 inline style이 적용되지 않으며, 다른 공통 속성 등을 적용하기 어렵기에 꼭 필요한 상황이 아니라면 사용을 자제하는 것이 좋다.
div {
margin: 30px !important;
}